package cn.huxingyuan.controller;

import cn.hutool.crypto.SecureUtil;
import cn.huxingyuan.user.domain.User;
import cn.huxingyuan.user.query.UserQuery;
import cn.huxingyuan.service.IUserService;
import cn.huxingyuan.util.R;
import cn.huxingyuan.util.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author Hu
 * 2025/8/5 16:14
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private IUserService userService;

    /**
     * 根据id查找用户信息
     * @param id 用户id
     * @return 用户信息
     */
    @GetMapping("/{id}")
    public R findById(Long id){
        User user = userService.findById(id);
        return R.ok(user);
    }

    /**
     * 查询全部用户信息
     * @return 所有用户的信息
     */
    @GetMapping("/getAll")
    public R findAll(){
        List<User> users = userService.findAll();
        return R.ok(users);
    }

    /**
     * 修改和新增用户信息
     * @param user 需要修改的用户信息
     * @return 统一返回信息
     */
    @PostMapping
    public R update(@RequestBody User user){

        if (user.getId() == null){
            //获取未加密密码
            String password = user.getPassword();
            //生成盐值
            String salt = RandomStringUtils.generate();
            //把盐值存起来
            user.setSalt(salt);
            //使用hutool工具包加密
            user.setPassword(SecureUtil.md5(password+salt));

            userService.add(user);
        }else {
            userService.update(user);
        }
        return R.ok();
    }

    /**
     * 根据id删除用户
     * @param id 要删除的用户的id
     * @return 统一返回信息
     */
    @DeleteMapping("/{id}")
    public R deleteById(@PathVariable(value = "id") Long id){
        userService.deleteById(id);
        return R.ok();
    }

    /**
     * 批量删除
     * @param ids 需要删除的id
     * @return 统一返回信息
     */
    @PostMapping("/batchDelete")
    public R batchDelete(@RequestBody List<Long> ids){
        userService.batchDelete(ids);
        return R.ok();
    }

    /**
     * 分页查询和条件查询
     * @param userQuery 查询条件
     * @return 查询出的用户信息和总条数
     */
    @PostMapping("/pageAll")
    public R pageAll(@RequestBody UserQuery userQuery){
        return R.ok(userService.pageAll(userQuery));
    }
}
